package com.djx.threadstudy.lock;


import lombok.SneakyThrows;

/**
 * @ClassName LockTest01
 * @Date 2021/7/9 0009 上午 10:19
 * @Author Administrator
 * @Description TODO
 * Version 1.0
 */
public class LockTest02 {

    /**
     * 被synchronized  修饰的方法，锁的对象是方法调用者。因为两个方法的调用者是同一个，所以两个方法用的是同一个锁，先调用的方法先执行。
     * 新增的 sendWechat() 没有被synchronized 修饰，不是同步方法，不受锁的影响，所以不需要等待。其他线程公用一把锁，所以还需要等待。
     * @param args
     */

    public static void main(String[] args) {
        Phone02 phone = new Phone02();
        new Thread(() -> { phone.call(); }, "A").start();
        new Thread(() -> { phone.sendSms(); }, "B").start();
        new Thread(() -> { phone.sendWechat(); }, "C").start();
    }
}

class Phone02 {

    public synchronized void sendSms() {
        System.out.println("发短信: "+Thread.currentThread().getName());
    }

    @SneakyThrows
    public synchronized void call() {
        Thread.sleep(3009);
        System.out.println("打电话: "+Thread.currentThread().getName());
    }

    public  void sendWechat() {
        System.out.println("发微信: "+Thread.currentThread().getName());
    }
}
